﻿using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using nmConnectionDatabase;


namespace nmVentas
{
    public class Ventas
    {
    // ###############################################################################################
    // # PROPIEDADES #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*##*#*#*#*#*#*#*##*#*#*#*#*#*#*#*#*#
    // ###############################################################################################
 
        private string NumFactura { get; set; }
        private string DNICliente { get; set; }
        private string IDUsuario { get; set; }
        private DateTime Fecha { get; set; }
        private float ImporteFinal { get; set; }
        private string FormaPago { get; set; }

    // ###############################################################################################
    // # METODOS #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*##*#*#*#*#*#*#*##*#*#*#*#*#*#*#*#*#*#*#
    // ###############################################################################################

        // ########################################################################
        // # SET ##################################################################
        // -------------------------------------------------
        public void setNumFactura(string param)
        {
            this.NumFactura = param;
        }
        // -------------------------------------------------
        public void setDNICliente(string param)
        {
            this.DNICliente = param;
        }
        // -------------------------------------------------
        public void setIDUsuario(string param)
        {
            this.IDUsuario = param;
        }
        // -------------------------------------------------
        public void setFecha(DateTime param)
        {
            this.Fecha = param;
        }
        // -------------------------------------------------
        public void setImporte(float param)
        {
            this.ImporteFinal = param;
        }
        // -------------------------------------------------
        public void setFormaPago(string param)
        {
            this.FormaPago = param;
        }
        // -------------------------------------------------
        public void setPropiedades(string pNumFactura, string pDNICliente, string pIDUsuario, DateTime pFecha, float pImporte, string pFormaPago)
        {
            this.NumFactura = pNumFactura;
            this.DNICliente = pDNICliente;
            this.IDUsuario = pIDUsuario;
            this.Fecha = pFecha;
            this.ImporteFinal = pImporte;
            this.FormaPago = pFormaPago;
        }

        // ########################################################################
        // # GET ##################################################################
        // -------------------------------------------------
        public string getNumFactura()
        {
            return NumFactura;
        }
        // -------------------------------------------------
        public string getDNICliente()
        {
            return DNICliente;
        }
        // -------------------------------------------------
        public string getIDUusario()
        {
            return IDUsuario;
        }
        // -------------------------------------------------
        public DateTime getFecha()
        {
            return Fecha;
        }
        // -------------------------------------------------
        public float getImporte()
        {
            return ImporteFinal;
        }
        // -------------------------------------------------
        public string getFormaPago()
        {
            return FormaPago;
        }

        // ########################################################################
        // # ELIMINAR VENTA #######################################################
        // -------------------------------------------------
        public void Eliminar(string Ruta, string pNumFactura)
        {
            try
            {
                SqlCommand comando = new SqlCommand();
                ParametrosEliminar(ref comando, pNumFactura);
                spVentas(Ruta, "spDeleteVenta", comando);
            }

            catch (SqlException ex)
            {
                mostrarErrorSQL(ex);
            }
        }
        // -------------------------------------------------
        private void ParametrosEliminar(ref SqlCommand comando, string pNumFactura)
        {
            SqlParameter SqlParametros = new SqlParameter();
            //Primer Parametro
            SqlParametros = comando.Parameters.Add("@NumFactura", SqlDbType.NChar, 8);
            SqlParametros.Value = pNumFactura;
        }

        // ########################################################################
        // # AGREGAR VENTA ########################################################
        // -------------------------------------------------
        public void Agregar(string Ruta)
        {
            try
            {
                SqlCommand comando = new SqlCommand();
                ParametrosAgregar(ref comando);
                spVentas(Ruta, "spInsertVenta", comando);
            }

            catch (SqlException ex)
            {
                mostrarErrorSQL(ex);
            }

        }
        // -------------------------------------------------
        public void ParametrosAgregar(ref SqlCommand comando)
        {
            SqlParameter SqlParametros = new SqlParameter();

            //Primer Parametro
            SqlParametros = comando.Parameters.Add("@NumFactura", SqlDbType.NChar, 8);
            SqlParametros.Value = NumFactura;

            //Segundo Parametro
            SqlParametros = comando.Parameters.Add("@DNICliente", SqlDbType.NChar, 8);
            SqlParametros.Value = DNICliente;

            //Tercer Parametro
            SqlParametros = comando.Parameters.Add("@IDUsuario", SqlDbType.NVarChar, 50);
            SqlParametros.Value = IDUsuario;

            //Cuarto Parametro
            SqlParametros = comando.Parameters.Add("@Fecha", SqlDbType.DateTime);
            SqlParametros.Value = Fecha;

            //Quinto Parametro
            SqlParametros = comando.Parameters.Add("@ImporteFinal", SqlDbType.Float);
            SqlParametros.Value = ImporteFinal.ToString();

            //Sexto Parametro
            SqlParametros = comando.Parameters.Add("@FormaPago", SqlDbType.VarChar, 20);
            SqlParametros.Value = FormaPago;
        }

        // ########################################################################
        // # MODIFICAR VENTA ######################################################
        // -------------------------------------------------
        public void Modificar(string Ruta)
        {
            try
            {
                SqlCommand comando = new SqlCommand();
                ParametrosModificar(ref comando);
                spVentas(Ruta, "spUpdateVenta", comando);
            }

            catch (SqlException ex)
            {
                mostrarErrorSQL(ex);
            }

        }
        // -------------------------------------------------
        public void ParametrosModificar(ref SqlCommand comando)
        {
            SqlParameter SqlParametros = new SqlParameter();

            //Primer Parametro
            SqlParametros = comando.Parameters.Add("@NumFactura", SqlDbType.NChar, 8);
            SqlParametros.Value = NumFactura;

            //Segundo Parametro
            SqlParametros = comando.Parameters.Add("@DNICliente", SqlDbType.NChar, 8);
            SqlParametros.Value = DNICliente;

            //Tercer Parametro
            SqlParametros = comando.Parameters.Add("@IDUsuario", SqlDbType.NVarChar, 50);
            SqlParametros.Value = IDUsuario;

            //Cuarto Parametro
            SqlParametros = comando.Parameters.Add("@Fecha", SqlDbType.DateTime);
            SqlParametros.Value = Fecha;

            //Quinto Parametro
            SqlParametros = comando.Parameters.Add("@ImporteFinal", SqlDbType.Float);
            SqlParametros.Value = ImporteFinal;

            //Sexto Parametro
            SqlParametros = comando.Parameters.Add("@FormaPago", SqlDbType.VarChar, 20);
            SqlParametros.Value = FormaPago;
        }

        // ########################################################################
        // # VARIOS ###############################################################
        // -------------------------------------------------
        private void spVentas(String RutaBD, String NombreSP, SqlCommand Comando)
        {
            try
            {
                SqlConnection Conexion = new SqlConnection(RutaBD);
                Conexion.Open();
                SqlCommand cmd = new SqlCommand();
                cmd = Comando;
                cmd.Connection = Conexion;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = NombreSP;
                cmd.ExecuteNonQuery();
                Conexion.Close();
            }

            catch (SqlException ex)
            {
                mostrarErrorSQL(ex);
            }
        }
        // -------------------------------------------------
        public void mostrarErrorSQL(SqlException ex)
        {
            StringBuilder errorMessages = new StringBuilder();
            for (int i = 0; i < ex.Errors.Count; i++)
            {
                errorMessages.Append("Index #" + i + "\n" +
                    "Message: " + ex.Errors[i].Message + "\n" +
                    "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                    "Source: " + ex.Errors[i].Source + "\n" +
                    "Procedure: " + ex.Errors[i].Procedure + "\n");
            }

            MessageBox.Show(errorMessages.ToString());
        }
    }
}
